'use strict';

const jwt = require('jsonwebtoken');

/**
 * 生成JWT token
 * @param {Object} payload - token载荷
 * @param {String} secret - 密钥
 * @param {String} expiresIn - 过期时间
 * @returns {String} token
 */
function signToken(payload, secret, expiresIn) {
  return jwt.sign(payload, secret, { expiresIn });
}

/**
 * 验证JWT token
 * @param {String} token - token字符串
 * @param {String} secret - 密钥
 * @returns {Object} 解码后的token数据
 */
function verifyToken(token, secret) {
  try {
    return jwt.verify(token, secret);
  } catch (error) {
    return null; // Token无效或过期，返回null
  }
}

/**
 * 从请求头中提取token
 * @param {Object} ctx - egg context
 * @returns {String|null} token
 */
function getTokenFromHeader(ctx) {
  const authorization = ctx.get('Authorization') || ctx.get('authorization');
  if (!authorization) {
    return ctx.get('token') || null;
  }
  
  // Bearer token格式
  if (authorization.startsWith('Bearer ')) {
    return authorization.substring(7);
  }
  
  return authorization;
}

module.exports = {
  signToken,
  verifyToken,
  getTokenFromHeader,
};

